﻿#include "video.h"
//#include "texture.h"
//#include <opencv2/imgproc.hpp>
//#include <opencv2/videoio.hpp>
//
//anip::VideoProvider::VideoProvider(cv::VideoCapture& cap):
//	_cap(&cap)
//{
//	assert(cap.isOpened());
//
//	int w = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH);
//	int h = (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT);
//
//	TextureOptions opt;
//	opt.format = ColorFormat::RGB;
//	_tex = new Texture2D(w, h, &opt);
//	_mat = new cv::Mat();
//	_flipped = new cv::Mat();
//
//	nextFrame();
//}
//
//anip::VideoProvider::~VideoProvider()
//{
//	delete _cap, _mat, _flipped, _tex;
//}
//
//anip::VideoProvider* anip::VideoProvider::fromFile(const string& path)
//{
//	auto cap = new cv::VideoCapture(path);
//	return new VideoProvider(*cap);
//}
//
//anip::VideoProvider* anip::VideoProvider::fromDevice(int i)
//{
//	auto cap = new cv::VideoCapture(i);
//	return new VideoProvider(*cap);
//}
//
//bool anip::VideoProvider::nextFrame()
//{
//	bool res = _cap->read(*_mat);
//	if (res)
//	{
//		//cv::flip(*_mat, *_flipped, 0);
//		cv::cvtColor(*_mat, *_flipped, cv::COLOR_BGR2RGB);
//		_flipped = _mat;
//		bool resize = false;
//		if (_mat->rows != _tex->height() || _mat->cols != _tex->width())
//			_tex->setData(_mat->cols, _mat->rows, _flipped->ptr());
//		else
//			_tex->setPartialData(0, 0, _mat->cols, _mat->rows, _flipped->ptr());
//	}
//	return res;
//}
//
//anip::vec2 anip::VideoProvider::size() const
//{
//	int w = (int)_cap->get(cv::CAP_PROP_FRAME_WIDTH);
//	int h = (int)_cap->get(cv::CAP_PROP_FRAME_HEIGHT);
//	return { (float)w, (float)h };
//}
//
//void anip::VideoProvider::setFramePosition(int n)
//{
//	if (framePosition() == n) return;
//
//	_cap->set(cv::CAP_PROP_POS_FRAMES, n);
//	nextFrame();
//}
//
//int anip::VideoProvider::framePosition() const
//{
//	return (int)_cap->get(cv::CAP_PROP_POS_FRAMES);
//}
//
//double anip::VideoProvider::frameRate() const
//{
//	return _cap->get(cv::CAP_PROP_FPS);
//}